There are two encodation schemes commonly used in modem bar code symbology design, “Binary” encoding and (“n,k)” encoding. Each have their advantages and disadvantages; generally speaking, (n,k) encoding is more space-efficient, but Binary encoding is more tolerant of poor printing. Thus, both types will continue to be widely used for the foreseeable future. “Binary” codes (such as Code 39) define the set of bar/space patterns making up its “language” or bar code character set using only two choices (“wide” or “narrow”) for each bar and space of each pattern. The wide:narrow ratio can be selected when printing each bar code. Selecting a 2:1 ratio creates a more compact bar code; a 2.5:1 or 3:1 ratio makes the bar code wider, but also makes it easier for the scanner to distinguish wide elements from narrow ones (helpful when printing on rough cardboard, for example). “Delta Distance” codes (Such as UPC-A and Code 128) use an encodation scheme known as (n,k) encoding, to define the set of bar/space patterns making up its “language” or bar code character set. In an (n,k) code, each bar code character is comprised of “k” bars and “k” spaces (eg, 3 bars and 3 interleaved spaces), and each individual bar and space is an integer multiple (1,2, . . . m) of a unit width (called a “module”). Unlike the case for Binary codes, these ratios cannot be altered to accommodate difficult printing situations.
One characteristic that the Binary and (n,k) encodation schemes share is that they both define a unit width (called a module), and in either scheme, the narrowest bars and the narrowest spaces are both one module wide. Ideally, every printed barcode would be printed exactly to specification, in order to allow a maximum tolerance for noise and other distortions during the scanning process. In practice, however, the printing process can introduce a variety of imperfections, many of these resulting from imperfections in the paper (or other substrate) that the bar code is printed upon. These substrate imperfections may introduce random errors in the positions of the edges that separate dark bars from light spaces within the bar code.
One substrate-induced error stems from the fact that different substrates vary (and even different pages of the same substrate vary) in how they absorb ink at the time of printing. The result is that, on a given sample of a substrate, the dark areas (bars) of a bar code may be significantly wider than the spaces that were nominally of the same width. Yet, on a different sample, the same bar code digital image may result in a printed symbol where the bars are narrower than nominal, rather than wider. It is usually the case, however, that on a given printed sample, all of the printed dots tend to show the same amount of “dot gain” (or loss). Therefore, all of the bar code's bars tend to be either bigger than nominal (and by the same amount), or all are smaller (and by the same amount). Thus, from the perspective of reading a bar code, this dot-gain phenomenon is considered a systematic (not random) error, and is known as “uniform ink spread.”
Uniform ink spread is such a common printing problem that current symbology designs almost always rely on a technique called “edge to similar edge decoding” (also called “delta distance decoding”) to handle it. Ink spreads uniformly outwardly from the center of each printed dot, and therefore the left and right edges of every printed bar will move outwardly (from the bar's center) by equal amounts. Thus, a measurement taken from the left edge of one bar, across the bar and the next space, to the left edge of the next bar, will not vary with the degree of ink spread. Some bar code symbologies, such as Code 128, were designed to be decoded based on such “edge to similar edge” measurements and thus are relatively immune to uniform ink spread.
Unlike codes such as Code 128, binary codes are typically not decoded using “delta distance decoding” techniques and thus do not have the same inherent immunity to ink spread. However, various techniques for decoding binary codes (by estimating a “threshold” width, ideally halfway between the nominal wide and nominal narrow widths) are well known in the art, and can provide good immunity to ink spread and other printing errors.
Although “delta distance decoding” and other decoding techniques known in the art address some problems caused by ink spread, there is a remaining problem with ink spread that is not solved by these techniques. This problem is that when narrow (1-module) spaces shrink due to ink spread, they can become so narrow that they may not be seen at all by the scanner (or at the least, will reduce the effective working range of the scanner). So, even with “delta distance” codes, some form of ink spread control is required. This is done by adjusting the ideal representation of the bar code before printing it, a process often known as “pre-compensation” of the image.
Traditional ink-spread pre-compensation methods involve reducing the width of each printed bar with an exactly corresponding increase in the width of each space (or the opposite—increasing the bar width and decreasing the space—in those rare cases where the expectation is for a consistently under-inked printing process). For example, one might adjust the ideal bar code image by replacing the last column of black pixels of every bar with a column of white pixels (i.e., “shaving” one dot from the right edge of every bar). The advantage of this traditional approach is that the decoding technique, as described above, gives an identical edge-to-similar-edge measurement, whether compensation was applied or not. The major disadvantage is that, by definition, the bar code image contains bars that are less than 1 module wide. This creates two significant problems.
First, if, in a given instance of printing, the ink does not spread, the printed code will have bars that are smaller than nominal. This condition can degrade scannability. Similarly, if the ink-spread phenomenon is not consistent from one printed sample to another, then the traditional pre-compensation method will sometimes improve system performance, and sometimes degrade it.
Second, the compensated image now contains “finer” lines than before. It is common for the same page-layout file to be used for printing on presses with different physical resolutions (i.e., the physical distance between dots of the printer vary significantly across printing processes). The last step in the publishing chain, called Raster Image Processing, maps the image to the addressable dots of the printer. This stage, and previous stages, can introduce rounding or scaling errors in the widths of the bars and spaces. The thinner the bars, the more likely that the process will create an occasional bar that is much too wide or narrow, resulting in an unreadable barcode.
Thus, in order to avoid both of these problems, the ideal pre-compensation method would not decrease the size of any bars or spaces of the bar code.
The use of bar codes in printed advertisements and newspaper text is expected to increase significantly in the near future, as the cost of Internet-enabled scanning devices becomes low enough for the consumer mass market. Currently, several methods have been proposed for using a printed bar code for automatically connecting to an appropriate site on the World Wide Web. As a result of this and other applications, it will become increasingly common to print the same bar code image, and the same advertisement containing a bar code image, in a variety of print media including magazines, newspapers, catalogs, and telephone directories (white pages and yellow pages). Each of these print media typically has its own combination of printing press technology (such as gravure, offset, and flexography) and paper (ranging from high-weight glossy paper in magazines, to recycled newsprint and the very low-weight paper used in a telephone book), each variation of which may have different ink spread characteristics. Therefore, as consumer scanning applications proliferate, it will no longer be feasible to generate a single bar code image, or a single ad containing a bar code, that will be appropriately pre-compensated for all of the substrates it will be printed on, using traditional pre-compensation techniques.